package com.yq.homework.day25;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author 3307235355@qq.com
 * @since 2022/06/25 16:49
 *  解密在文件加密中生成的文件(解密刚才加密的文件)。
 * 设计一个方法
 * public static void decodeFile(File decodingFile, File decodedFile);
 *
 * 在这个方法中把decodingFile的内容进行解密，
 * 然后保存到decodedFile文件中。
 *
 * 解密算法：
 * 数字：
 * 如果不是0的数字，在原来的基础上减1，比如6变成5, 4变成3 如果是0的数字，变成9
 * 字母字符：
 * 如果是非a字符，向左移动一个，比如e变成d, H变成G 如果是a，a->z, A-Z。 字符需要保留大小写
 * 非字母字符： 比如',&^ 保留不变，中文也保留不变
 */
public class Demo04 {
    public static void main(String[] args) throws IOException{
        decodeFile(new File("b.txt"),new File("c.txt"));
    }

    public static void decodeFile(File decodingFile, File decodedFile)throws IOException {

        FileReader in = new FileReader(decodingFile);
        FileWriter out = new FileWriter(decodedFile);

        char[] chars = new char[1024];
        int readCount ;
        while ((readCount= in.read(chars))!=-1){
            String s = new String(chars, 0, readCount);
            char[] c1 = s.toCharArray();
            for (int i = 0; i < c1.length; i++) {
                //数字的加减
                if (c1[i]>'0' && c1[i]<='9'){
                    c1[i]= (char) (c1[i]-1);
                }else if (c1[i]=='0'){
                    c1[i]='9';
                }
                //字母的加减
                if ((c1[i]>'a' && c1[i]<='z') || (c1[i]>'A' && c1[i]<='Z')){
                    c1[i]= (char) (c1[i]-1);
                }else  if (c1[i] =='a'){
                    c1[i]='z';
                }else if (c1[i]=='A'){
                    c1[i]='Z';
                }
            }
            out.write(c1);
        }
        in.close();
        out.close();
    }

}
